/**
 * @author luzhenfang
 * @date 2020 04 27
 * @description TS 函数
 *     在ts 中函数是有返回值的
 *          function funName():type{
 *              return type;
 *          }
 *      如果没有返回值 则定义为 void
 *      实参和形参数量要一致
 *      实参和形参类型要一致
 *  可选参数：在参数后面+ ？
 *      function Hi(str?:string):void{
 *              
 *      }
 *  默认值：如果参数有默认值则 可忽略
 *  剩余参数； ...xxx:type[]  必须放在函数最后面
 */

 // 无参
 function sayHello1():void{
     let hello:string="Hello,TypeScript!";
     console.log(hello);
 }

 // 有参
 function sayHello2(word1:string,word2:string):string{
     return `${word1},${word2}`;
 }

 sayHello1();
 alert(sayHello2("hello","world"));

 // 可选参数 在参数后面 + ？
function hi(str?:string){
    console.log("Hi~`");
}
hi();
// 默认值 
function add(a:number=0,b:number=0):number{
    return a+b;
}
// 不传递实参
console.log(add());
// 传1个实参
console.log(add(1));
// 传两个实参
console.log(add(3,4));
// 只传第二个实参 ********
console.log(add(undefined,3));

// 剩余参数

function argu(flag:number,...args:number[]):number{
    let result:number=0;

    // for ...of 遍历元素
    // for ...in 遍历下标

    for (const iterator of args) {
        if(flag===0){
            result+=iterator;
        }else{
            result-=iterator;
        }
    }

    // for(let i =0;i<args.length;i++){
    //     if(flag===0){
    //         result+=args[i];
    //     }else{
    //         result-=args[i];
    //     }
    // }
    return result;
}
alert(argu(0,1,2,3,4,5,6,7,8,9,10));